package com.qut.graduate.busrtquery.greendao.controller;

import android.content.Context;
import android.content.ContextWrapper;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;

import com.qut.graduate.busrtquery.utils.common.LogUtils;

import java.io.File;
import java.io.IOException;

/**
 * @Author WLL
 * @Time: 2019/3/29 17:22
 */
public class GreenDaoContext extends ContextWrapper {

    public GreenDaoContext(Context context) {
        super(context);
    }

    /**
     * 获得数据库路径，如果不存在，则创建对象对象
     *
     * @param name
     */
    @Override
    public File getDatabasePath(String name) {
        boolean sdExist = Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()); // 判断是否存在sd卡
        if (!sdExist) {
            return null;
        } else {
            String dbDir = Environment.getExternalStorageDirectory().getAbsolutePath(); // 如果存在，获取sd卡路径
            dbDir = dbDir.concat(File.separator).concat("Android").concat(File.separator).concat("data")
                    .concat(File.separator).concat("BRTQ");
            String dbPath = dbDir.concat(File.separator).concat(name); // 数据库路径
            LogUtils.d("----GreenDaoContext  数据库路径:" + dbPath);
            File dirFile = new File(dbDir); // 判断目录是否存在，不存在则创建该目录
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            boolean isFileCreateSuccess = false; // 数据库文件是否创建成功
            File dbFile = new File(dbPath); // 判断文件是否存在，不存在则创建该文件
            if (!dbFile.exists()) {
                try {
                    isFileCreateSuccess = dbFile.createNewFile();
                } catch (IOException e) {
                    LogUtils.d("----GreenDaoContext  E-创建数据库文件失败" + e);
                }
            } else {
                isFileCreateSuccess = true;
            }
            // 返回数据库文件对象
            if (isFileCreateSuccess) {
                return dbFile;
            } else {
                return super.getDatabasePath(name);
            }
        }
    }

    /**
     * 重载这个方法，是用来打开SD卡上的数据库的，android 2.3及以下会调用这个方法。
     *
     * @param name
     * @param mode
     * @param factory
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
    }

    /**
     * Android 4.0会调用此方法获取数据库。
     *
     * @param name
     * @param mode
     * @param factory
     * @param errorHandler
     */
    @Override
    public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
        return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null);
    }

}
